package com.gitee.swsk33.loginterface.service;

import com.gitee.swsk33.loginterface.spi.Logger;

import java.util.ArrayList;
import java.util.List;
import java.util.ServiceLoader;

/**
 * 服务，用于加载所有服务使用者的实现类，以及供外部调用
 * 该类为一个单例
 */
public class LoggerService {

	/**
	 * 该类唯一单例
	 */
	private static final LoggerService LOGGER = new LoggerService();

	/**
	 * 默认的Logger实现类
	 */
	private final Logger defaultLogger;

	/**
	 * 所有的Logger实现类列表
	 */
	private final List<Logger> allLoggers = new ArrayList<>();

	/**
	 * 私有化构造器
	 */
	private LoggerService() {
		// 加载全部Logger接口的实现类
		ServiceLoader<Logger> loader = ServiceLoader.load(Logger.class);
		// 将实现类放入我们的Logger实现类列表
		for (Logger logger : loader) {
			allLoggers.add(logger);
		}
		// 这里取出第一个作为默认实现类
		if (!allLoggers.isEmpty()) {
			defaultLogger = allLoggers.get(0);
		} else {
			defaultLogger = null;
		}
		System.out.println("加载到" + allLoggers.size() + "个服务实现！");
	}

	/**
	 * 获取该服务类的唯一单例
	 *
	 * @return 该服务类的唯一单例
	 */
	public static LoggerService getInstance() {
		return LOGGER;
	}

	/**
	 * 调用默认的实现类的info日志打印方法
	 *
	 * @param message 消息
	 */
	public void info(String message) {
		if (defaultLogger == null) {
			System.err.println("没有找到实现了Logger接口的类！");
			return;
		}
		defaultLogger.info(message);
	}

	/**
	 * 调用默认的实现类的debug日志打印方法
	 *
	 * @param message 消息
	 */
	public void debug(String message) {
		if (defaultLogger == null) {
			System.err.println("没有找到实现了Logger接口的类！");
			return;
		}
		defaultLogger.debug(message);
	}

}